package com.rustic.server.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rustic.server.enums.CategoryType;
import com.rustic.server.po.Category;
import com.rustic.server.query.CategoryAdminListQuery;
import com.rustic.server.vo.list.CategoryAdminListVO;
import com.rustic.server.vo.list.CategoryWebListVO;

import java.util.List;
import java.util.Map;

/**
 * 表[category]对应的服务类
 *
 * @author auto
 */

public interface CategoryService extends IService<Category> {

    String CATEGORY_NOT_EXIST = "分类不存在";

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList id列表
     * @return 分类列表
     */
    List<Category> listByIdIn(List<Integer> idList);

    /**
     * 查询（根据ID 批量查询）并转换成Map
     *
     * @param idList id列表
     * @return 分类列表
     */
    Map<Integer, Category> mapByIdIn(List<Integer> idList);

    /**
     * 管理列表查询条件
     *
     * @param query 查询参数
     * @return 查询条件
     */
    LambdaQueryWrapper<Category> toAdminListWrapper(CategoryAdminListQuery query);

    /**
     * toAdminListVo
     *
     * @param categoryList categoryList
     * @return AdminListVO
     */
    List<CategoryAdminListVO> toAdminListVo(List<Category> categoryList);

    /**
     * toWebListVo
     *
     * @param categoryList categoryList
     * @return WebListVo
     */
    List<CategoryWebListVO> toWebListVo(List<Category> categoryList);

    /**
     * 根据分类类型查询
     *
     * @param categoryType 分类类型
     * @return List<Category>
     */
    List<Category> listByType(CategoryType categoryType);

    /**
     * 根据多个分类类型查询
     *
     * @param categoryType 分类类型列表
     * @return List<Category>
     */
    List<Category> listByTypes(List<Integer> categoryType);

    /**
     * 根据分类id和分类类型查询
     * @param id id
     * @param categoryType 分类类型
     * @return Category
     */
    Category getByIdAndType(int id, CategoryType categoryType);
}
